const axios = require('axios');

/**
 * 消息推送配置
 * app_id 放入你的app_id
 * app_secret 放入你的app_secret
 * template_id 放入你的消息模板id
 * template_data 配置你消息模板中的变量的值和字体颜色
 * user.id 被推送的用户微信号
 * */
const config = {
  app_id: '',
  app_secret: '',
  template_id: '',
  template_data: {
    'Name': {
      value: '陈龙威',
      color: '#FF5440'
    }
  },
  user: {
    id: ''
  }
};


/**
 * 获取accessToken
 * */
async function getAccessToken() {
  const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.app_id}&secret=${config.app_secret}`
  const res = await axios.get(url).catch(err => console.error(err));
  if (res.status === 200 && res.data?.access_token) {
    sendMsgByWechatTest(res.data.access_token)
  } else {
    console.error(`获取accessToken失败:`);
    console.error(res.data);
  }
}


/**
 * 使用微信测试号功能推送
 *
 * data: {
 *   touser: '', // 被推送者的微信号
 *   template_id: '', // 消息模板id，上图红框标明
 *   url: '', // 推送消息底部详情按钮打开的地址，添加则不展示详情按钮
 *   topcolor: '#FF0000', // 顶部颜色？不明白，我设置了红色，但是没效果，貌似已经不用
 *   data: { // 这里就是配置消息模板里面的值和字体颜色了
 *      'xx': {
 *          value: '你好，clw', // 上述中{{xx.DATA}}所代表的值
 *          color: '#FF0000', // 变量的字体颜色
 *      }
 *   }
 * }
 *
 * 接口配置见：https://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl
 * */
async function sendMsgByWechatTest(accessToken) {
  const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${accessToken}`;
  const data = {
    touser: config.user.id,
    template_id: config.template_id,
    url: 'https://www.baidu.com',
    topcolor: '#FF0000',
    data: config.template_data
  };
  const res = await axios.post(url, data, {
    headers: {
      'Content-Type': 'application/json',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
  }).catch(err => console.error(err));
  if (res.data?.errcode === 0) {
    console.log('推送成功');
  } else {
    console.error('推送失败:');
    console.error(res.data);
  }
}

getAccessToken();
